018_1・・・もし~なら「if構文」「条件分岐」
(※条件分岐、覚書メモ)
wordpressでは、if構文=条件分岐タグは、頻繁に使うので、まとめておきます。
どこに書くかの決まりはなく、使いたい php ファイルに書きます。
例えば「投稿ページと固定ページではヘッダー画像を変えたい」という場合であれば、ヘッダー画像を出力させている header.php でしょうし、
「新着リストの中でカテゴリー毎に何かの表示を変えたい」という事であれば、その新着リストを出力している固定ページだったり、或いはトップページだったりするでしょう。
条件分岐の基本
<?php if (条件) : ?> 条件にあてはまる場合の処理 <?php else: ?> それ以外の場合の処理 <?php endif; ?>
(例):モバイルとPCで別の文章を表示したい
<?php if ( wp_is_mobile() ) : ?> モバイルから閲覧の場合の処理 <?php else: ?> それ以外=PCからの閲覧の場合の処理 <?php endif; ?>
※ wp_is_mobile() とは、wordpress にあらかじめ用意されているタグです。
「モバイル(スマホ・タブレット)から閲覧されているかどうか」という判定をします。
※但し wp_is_mobile() のタグでは正確な分岐にはならない、もっと細かく各モバイル毎に設定をした方がいい、という意見もあります。
wp_is_mobile() を使うかどうかについては、また別の記事でまとめたいと思います。
→ ■004_2 wp_is_mobile タグを使うか否か
else: は省略できる
<?php if ( 条件 ) : ?> 条件にあてはまるものをココに書く <?php endif; ?>「それ以外の場合=何もしない」 ということであれば、
このように else: を省略してしまってもOKです。
elseif: で細かな条件分岐ができる
<?php if ( is_single() ) : ?> もし「個別記事」なら、△△△する <?php elseif ( is_page() ) : ?> もし「固定ページ」なら、×××する <?php else: ?> それ以外なら、○○○する <?php endif; ?>条件分岐を複数にした時は、elseif: を使います。
elseif: は何回繰り返してもよく、条件をいくつでも増やすことができます。
もし「○○でない場合」という書き方
<?php if ( !is_single() ) : ?> 個別ページでなかったら、の場合の処理をココに書く <?php endif; ?>条件の前に ! をつけると、否定形=「○○でない場合」になります。
複数の条件に当てはまる時(AND)
<?php if ( wp_is_mobile() && is_single() ) : ?> 「モバイル」かつ「記事ページ」の場合の処理をココに書く <?php endif; ?>AND=○○であり尚且つ△△でもある、という場合は、&& で、複数を繋げることができます。
いずれかの条件にしか当てはまらない時(OR)
<?php if ( wp_is_mobile() || is_single() ) : ?> 「モバイル」あるいは「記事ページ」の場合の処理をココに書く <?php endif; ?>OR=○○または△△、と、どれかにあてはまる場合、としたい時には、|| で、複数を繋げます。
スペルミスはエラーになる。
コロンや括弧を書き間違えたり、書き忘れたりしないようにしましょう。
下記は特に間違えやすいので、注意しましょう。
※ifとelseifの後には、コロン[:]
if(): と elseif(): というように書きます。 ; と書くとエラーになります。
※endifの後には、セミコロン[;]
endif; と書きます。 : ではありません。
※() や <> の数は合っているか
括弧は、ちゃんと閉じないとエラーになります。
※全角文字(かなモード)で記号を入力しない
コロン[:]、セミコロン[;]、括弧や&&の記号、スペースなど、すべて欧文英数字(ローマ字モード)で入力すること。
日本語=全角文字(かなモード)は使わない。
意識せずに「全角スペース」を使ってしまっている方も多いです。これもダメです。
コロンや括弧を書き間違えたり、書き忘れたりしないようにしましょう。
下記は特に間違えやすいので、注意しましょう。
※ifとelseifの後には、コロン[:]
if(): と elseif(): というように書きます。 ; と書くとエラーになります。
※endifの後には、セミコロン[;]
endif; と書きます。 : ではありません。
※() や <> の数は合っているか
括弧は、ちゃんと閉じないとエラーになります。
※全角文字(かなモード)で記号を入力しない
コロン[:]、セミコロン[;]、括弧や&&の記号、スペースなど、すべて欧文英数字(ローマ字モード)で入力すること。
日本語=全角文字(かなモード)は使わない。
意識せずに「全角スペース」を使ってしまっている方も多いです。これもダメです。
「何故かstyle.css が効かない!」という場合、ファイル中に「全角スペース」がないか、再確認してください。 「全角スペース」が含まれていると css は効かないです。
コメントを活用しよう
<?php if(条件): //◯◯のとき ?> ◯◯の条件の場合の処理をここに書く <?php else: //◯◯でないとき?> それ以外の場合の処理をここに書く <?php endif; //◯◯の条件分岐終了 ?>// を書くと、続く一文はコメントになります。
複数行のコメントは、また別の書き方があります。
phpの外、htmlのコメントの書き方も、また別でちょっと違います。
if構文(例:)トップページだけ
<?php if ( is_home() || is_front_page() ) : ?> もし home.php または front.php なら の処理をここに書く <?php else: ?> それ以外の場合の処理をここに書く <?php endif; ?>is_front_page() も書くことで、固定ページをホームに固定したときにも認識してくれるようになります。
if構文(例:)ホームの1ページ目だけ
<?php if( ( is_home() || is_front_page() ) && !is_paged() ) : ?> ホームの1ページ目のみに表示させたい処理をココに書く <?php endif; ?>さきほどの条件分岐だと、ホームの2ページ目(次の記事一覧)以降でも表示されます。
こちらの条件分岐であれば「ホームかつ1ページ目のとき」にのみ表示させることができます。
if構文(例:)個別記事ページだけ
<?php if ( is_single() ) : ?> 「個別記事」ページでのみ表示する処理をココに書く <?php else: ?> それ以外の処理をここに書く <?php endif; ?>
if構文(例:)固定ページだけ
<?php if ( is_page() ) : ?> 「固定ページ」でのみ表示する処理をココに書く <?php else: ?> それ以外の処理をここに書く <?php endif; ?>
if構文(例:)投稿ページもしくは固定ページだけ
<?php if ( is_singular() ) : ?> 「投稿ページ」もしくは「固定ページ」で表示する処理をココに書く <?php else: ?> それ以外の処理をここに書く <?php endif; ?>
if構文(例:)特定の記事ページだけ
<?php if ( is_single('投稿ID') ) : ?> 指定した記事でのみ表示する処理をココに書く <?php else: ?> それ以外の処理をここに書く <?php endif; ?>「この記事のときだけは表示するものを変えたい」「この記事のときだけ表示したい」というときに使います。
'投稿ID'は、記事をプレビューしたりした時に、記事のURLを見ると、
~/wp018.html?preview_id=255などと表示されるので、それで知ることができます。
if構文(例:)特定の記事ページだけ(複数あるとき)
<?php if ( is_single( array('投稿ID','投稿ID','投稿ID') ) ) : ?> 指定した記事でのみ表示する処理をココに書く <?php else: ?> それ以外の処理をここに書く <?php endif; ?>例えば、<?php if( is_single( array('5','15','100') ) ): ?> とすると
「投稿IDが5、15、100のページ」と「それ以外のページ」で表示が切り替えられるようになります。
, の数を増やせば、いくつでもまとめて指定することができます。
if構文(例:)特定の固定ページだけ
<?php if ( is_page('ページID') ) : ?> 指定した固定ページでのみ表示する処理をココに書く <?php else: ?> それ以外の処理をここに書く <?php endif; ?>固定ページIDも同じく、編集画面のURLで調べられます。
if構文(例:)特定の固定ページだけ(複数)
<?php if ( is_page( array('ページID','ページID','ページID') ) ) : ?> 指定した固定ページでのみ表示する処理をココに書く <?php else: ?> それ以外の処理をここに書く <?php endif; ?>例えば <?php if( is_page( array('1','5') ) ): ?> というように書きます。
また、数字を入れるとIDですが、数字の他に、スラッグ名やタイトルも入れることができます。
↓
<?php if ( is_page( array( 17, 'beef-stew', 'Irish Stew' ) ) ) : ?>ID が 17、投稿スラッグが "beef-stew"、またはタイトルが "Irish Stew" のいずれかにあてはまる投稿が表示されている場合
となります。
(数字=投稿IDの場合だけ、' ' を省略することができます。スラッグやタイトルの ' ' は、省略できません)
参照■WordPress Codex日本語版「条件分岐タグ」